#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName  :database.py
# @Time      :2021/04/06 09:51:57
# @Author    :Raink
# 如何在FASTAPI项目中如何配置数据库
# 01


from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


SQLALCHEMY_DATABASE_URL = 'sqlite:///./coronavirus.sqlite3'
# 使用postgresql数据库时如下链接
# SQLALCHEMY_DATABASE_URL = 'postgrsql://username:password@host:port/database_name'

engine = create_engine(
    SQLALCHEMY_DATABASE_URL,  # 数据库地址
    encoding='utf-8',  # 编码方式
    echo=True,  # 打印sql语句
    # sqlalchemy是多线程的 设置false，可以任意线程可使用，只在sqlite数据库时设置
    connect_args={'check_same_thread': False}
)

# 在sqlalchemy中，数据库的crud是通过会话进行的，所以必须先创建会话，
# 每一个SessionLocal实例，就是每一个数据库的session
# flush() 是指发送数据库语句到数据库，但数据库不一定执行写入磁盘
# commit() 是指提交事务，将变更保存到数据库文件
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=True)

# 创建基本的映射类
Base = declarative_base(bind=engine, name="Base")